package come.bjpowernode.javase.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ReflectTest05 {
    public static void main(String[] args) throws Exception{
        //获取类
        Class studentClass = Class.forName("come.bjpowernode.javase.reflect.bin.Student");
        String className = studentClass.getName();
        System.out.println("完整类名："+className);

        String simpleName = studentClass.getSimpleName();
        System.out.println("简类名："+simpleName);


        //获取类中所有的public修饰的field
        Field[] fields =  studentClass.getFields();
        System.out.println("getFields():"+fields.length);

        Field f = fields[0];
        String fieldName = f.getName();
        System.out.println("getName():"+fieldName);

        Constructor constructor = studentClass.getConstructor();
        Object o1 = constructor.newInstance();
        f.set(o1,11);
        Object o = f.get(o1);
        System.out.println(String.valueOf(o));

        //获取所有的field
        Field[] fs = studentClass.getDeclaredFields();
        System.out.println(fs.length);//5
        System.out.println("++++++++++++++");
        for(Field field : fs){
            //获取属性的修饰符列表
            int i = field.getModifiers();//返回的是一个数字，每个数字是修饰符的代号
            System.out.println("修饰符的代号："+i);
            //可以将代号转换成字符串
            String modifierString = Modifier.toString(i);
            System.out.println("修饰符："+modifierString);
            //获取属性的类型
            Class fieldType = field.getType();
            //String fName = fieldType.getName();
            String fName = fieldType.getSimpleName();
            System.out.println("属性的类型："+fName);
            //获取属性的名字
            System.out.println("属性的名字："+field.getName());
        }

    }
}
